home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-01 / wzun11sr.zip / FILEDLG.C < prev    next >
C/C++ Source or Header  |  1992-01-16  |  6KB  |  132 lines

  1. #include <windows.h>
  2. #include <assert.h>
  3. #include <string.h>
  4. #include <io.h>
  5. #include <stdio.h>
  6. #include "filedlg.h"
  7. #include "helpids.h"
  8.  
  9. #define FILES        39
  10. #define PATH         -16368
  11.  
  12. #define MAX_FILENAME_LEN 80
  13.  
  14. char
  15.     szIFileName[MAX_FILENAME_LEN+1] = "";          /* Input File Name                    */
  16.  
  17. extern char szAppName[];        /* application name                */
  18. extern char szFileName[];        /* current file name                */
  19. extern char szHelpFileName[];    /* help file name                    */
  20.  
  21. BOOL FAR PASCAL FileDlgProc  (HWND hDlg, WORD message, WORD wParam, LONG lParam)
  22.     {
  23.     char
  24.         cLastChar = 0x00;           // chr 0 (last char of string)
  25.     short       nEditLen = 0x00;    // Length of Edit Field
  26.     OFSTRUCT OfStruct;                /* local open file structure        */
  27.     static char szFileSpec[12];     /* Initial File Specification        */
  28.     char scratch[80];               // Scratch buffer
  29.  
  30.     switch (message)
  31.         {
  32.         case WM_INITDIALOG:
  33.             strcpy(szFileSpec, "*.ZIP");    /* initialize file spec    */
  34.             SendDlgItemMessage (hDlg, IDD_IFNAME, EM_LIMITTEXT, MAX_FILENAME_LEN, 0L);
  35.             DlgDirList (hDlg, szFileSpec, IDD_FLIST, NULL, FILES);
  36.             DlgDirList (hDlg, szFileSpec, IDD_DLIST, IDD_FPATH, PATH);
  37.             SetDlgItemText (hDlg, IDD_IFNAME, szFileSpec);
  38.             InvalidateRect (hDlg, NULL, TRUE);
  39.             SendMessage (hDlg, WM_COMMAND, DLG_OK, 0L);
  40.             return TRUE;
  41.  
  42.         case WM_COMMAND:
  43.             switch (wParam)
  44.                 {
  45.                 case IDD_FLIST:
  46.                     switch (HIWORD (lParam))
  47.                         {
  48.                         case LBN_SELCHANGE:
  49.                             DlgDirSelect (hDlg, szIFileName, IDD_FLIST);
  50.                             SetDlgItemText (hDlg, IDD_IFNAME, szIFileName);
  51.                             return TRUE;
  52.  
  53.                         case LBN_DBLCLK:
  54.                             DlgDirSelect (hDlg, szIFileName, IDD_FLIST);
  55.                             SetDlgItemText (hDlg, IDD_IFNAME, szIFileName);
  56.                             SendMessage (hDlg, WM_COMMAND, DLG_OK, 0L);
  57.                             return TRUE;
  58.                         }
  59.                     break;
  60.  
  61.                 case IDD_DLIST:
  62.                     switch (HIWORD (lParam))
  63.                         {
  64.                         case LBN_SELCHANGE:
  65.                             DlgDirSelect (hDlg, szIFileName, IDD_DLIST);
  66.                             lstrcat (szIFileName, szFileSpec);
  67.                             SetDlgItemText (hDlg, IDD_IFNAME, szIFileName);
  68.                             return TRUE;
  69.  
  70.                         case LBN_DBLCLK:
  71.                             DlgDirSelect (hDlg, szIFileName, IDD_DLIST);
  72.                             lstrcat (szIFileName, szFileSpec);
  73.                             DlgDirList (hDlg, szFileSpec, IDD_FLIST, NULL, FILES);
  74.                             DlgDirList (hDlg, szFileSpec, IDD_DLIST, IDD_FPATH, PATH);
  75.                             SetDlgItemText (hDlg, IDD_IFNAME, szIFileName);
  76.                             SendMessage (hDlg, WM_COMMAND, DLG_OK, 0L);
  77.                             return TRUE;
  78.                         }
  79.                     break;
  80.  
  81.                 case DLG_OK:
  82.                     GetDlgItemText (hDlg, IDD_IFNAME, szIFileName, 
  83.                                         (sizeof(szIFileName)-1));
  84.                     nEditLen = lstrlen (szIFileName);
  85.                     cLastChar = *AnsiPrev (szIFileName, szIFileName + nEditLen);
  86.                     if (cLastChar == '\\' || cLastChar == ':')
  87.                         lstrcat (szIFileName, szFileSpec);
  88.                     if (strchr (szIFileName, '*') || strchr (szIFileName, '?'))
  89.                         {
  90.                         DlgDirList (hDlg, szIFileName, IDD_FLIST, NULL, FILES);
  91.                         if (DlgDirList (hDlg, szIFileName, IDD_DLIST, IDD_FPATH, PATH))
  92.                             {
  93.                             lstrcpy (szFileSpec, szIFileName);
  94.                             SetDlgItemText (hDlg, IDD_IFNAME, szFileSpec);
  95.                             }
  96.                         else
  97.                             MessageBeep (0);
  98.                         return TRUE;
  99.                         }
  100.                     lstrcat (lstrcat (szIFileName,"\\"), szFileSpec);
  101.                     DlgDirList (hDlg, szIFileName, IDD_FLIST, NULL, FILES);
  102.                     if (DlgDirList (hDlg, szIFileName, IDD_DLIST, IDD_FPATH, PATH))
  103.                         {
  104.                         lstrcpy (szFileSpec, szIFileName);
  105.                         SetDlgItemText (hDlg, IDD_IFNAME, szFileSpec);
  106.                         return TRUE;
  107.                         }
  108.                     szIFileName [nEditLen] = '\0';
  109.                     if (OpenFile(szIFileName, &OfStruct, OF_EXIST) < 0)
  110.                         {
  111.                         wsprintf (scratch, "Cannot open %s", (LPSTR)szIFileName);
  112.                         MessageBox (hDlg, scratch, szAppName, MB_ICONINFORMATION | MB_OK);
  113.                         return TRUE;
  114.                         }
  115.                     strcpy(szFileName, OfStruct.szPathName); /* use valid OEM filename */
  116.                     EndDialog (hDlg, TRUE);
  117.                     return TRUE;
  118.  
  119.                 case IDCANCEL:        /* ESC key                        */
  120.                 case DLG_CAN:
  121.                     szIFileName [0] = 0x00;
  122.                     EndDialog (hDlg, FALSE);
  123.                     return TRUE;
  124.                  case IDD_HELP:
  125.                     WinHelp(hDlg,szHelpFileName,HELP_CONTEXT, (DWORD)(HELPID_OPEN));
  126.                     return TRUE;
  127.                 }
  128.         }
  129.     return FALSE;
  130.     }
  131.  
  132.